import { reqGetCode, reqUserRegister, reqUserLogin, reqUserInfo, reqLogout } from "@/api"
import { setToken, getToken, removeToken } from "@/utils/token"
// 登录与注册的模块
const actions = {
    // 获取验证码
    async getCode(context, phoneNumber) {
        // 获取验证码的这个接口：把验证码返回了，但是正常情况，应该是后台把验证码发到用户手机上
        const result = await reqGetCode(phoneNumber)
        if (result.code === 200) {
            context.commit("GETCODE", result.data)
            return Promise.resolve("ok")
        } else {
            return Promise.reject(new Error("failed"))
        }
    },
    // 用户注册
    async userRegister(context, user) {
        const result = await reqUserRegister(user)
        if (result.code == 200) {
            return Promise.resolve("ok")
        } else {
            return Promise.reject(new Error("failed"))
        }
    },
    // 用户登录(token)
    async userLogin(context, data) {
        const result = await reqUserLogin(data)
        // 服务器下发token，用户唯一标识符（uuid）
        // 将来经常通过token找服务器用户要信息进行展示
        if (result.code == 200) {
            // 用户已经登录成功且已经收到token
            context.commit("USERLOGIN", result.data.token)
            // 持久化存储token
            setToken(result.data.token)
            return Promise.resolve("ok")
        } else {
            return Promise.reject(new Error("failed"))
        }
    },
    // 用户信息获取
    async getUserInfo(context) {
        const result = await reqUserInfo()
        if (result.code === 200) {
            context.commit("GETUSERINFO", result.data)
            return Promise.resolve("ok")
        } else {
            return Promise.reject(new Error("failed"))
        }
    },
    // 退出登录
    async userLogout(context) {
        //  只是向服务器发起一次请求，通知服务器清除token
        const result = await reqLogout()
        if (result.code === 200) {
            context.commit("CLEAR")
            return Promise.resolve("ok")
        } else {
            return Promise.reject(new Error("failed"))
        }
    },
}
const mutations = {
    GETCODE(state, code) {
        state.code = code
    },
    USERLOGIN(state, token) {
        state.token = token
    },
    GETUSERINFO(state, userInfo) {
        state.userInfo = userInfo
    },
    CLEAR(state) {
        // 把仓库中相关用户信息清空
        state.token = ""
        state.userInfo = {}
        // 本地存储数据清空
        removeToken()
    },
}
const state = {
    code: "",
    token: getToken(),
    userInfo: {},
}
const getters = {}

export default {
    namespaced: true, //开启命名空间
    actions,
    mutations,
    state,
    getters,
}
